<template>
  <div>
    <input ref="myp" type="text" placeholder="输入框" v-if="isshow" />
    <button v-else @click="btn">点击获取焦点</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isshow: "",
    };
  },
  methods: {
    async btn() {
      this.isshow = true;
      this.$nextTick(() => {
        // this.$refs.myInp.focus()
        // 原因: data变化更新DOM是异步的
        // 输入框还没有挂载到真实DOM上
        // 解决:
        // this.$nextTick(() => {
        //     this.$refs.myInp.focus()
        // })
        // 扩展: await取代回调函数
        // $nextTick()原地返回Promise对象
        this.$refs.myp.focus();
      });
    },
  },
};
</script>

<style>
</style>